package heureCalcul.metier;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Encapsulateur de Date avec un SimpleDateFormat
 * 
 * @author a.danicel
 * 
 */
public class DateFormatUtil {

    /**
     * @return
     */
    public static SimpleDateFormat getSimpleDateFormatAll() {
        return new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    }

    /**
     * @return
     */
    public static SimpleDateFormat getSimpleDateFormatClassic() {
        return new SimpleDateFormat("dd/MM/yyyy");
    }

    public static SimpleDateFormat getSimpleDateFormatHeure()
    {
        return new SimpleDateFormat("HH'h'mm");
    }

    private Date date;

    private final SimpleDateFormat sdf;

    /**
     * Crée la date de maintenant avec le format date et heure
     */
    public DateFormatUtil() {
        this(getSimpleDateFormatAll(), new Date());
    }

    /**
     * Spécifie une date avec le format date et heure
     * 
     * @param pDate
     */
    public DateFormatUtil(final Date pDate) {
        this(getSimpleDateFormatAll(), pDate);
    }

    /**
     * Crée la date de maintenant avec un format à choisir
     * 
     * @param pSimpleDateFormat
     */
    public DateFormatUtil(final SimpleDateFormat pSimpleDateFormat) {
        this(pSimpleDateFormat, new Date());
    }

    public DateFormatUtil(final SimpleDateFormat pSimpleDateFormat, final Date pDate) {
        this.sdf = pSimpleDateFormat;
        this.date = pDate;
    }

    /**
     * Permet de récupérer la date à partir d'un String qu'on parse avec un format à choisir
     * 
     * @param pSimpleDateFormat
     * @param dateString
     * @throws ParseException
     */
    public DateFormatUtil(final SimpleDateFormat pSimpleDateFormat, final String dateString) throws ParseException {
        this(pSimpleDateFormat, pSimpleDateFormat.parse(dateString));
    }

    public Date getDate() {
        return date;
    }

    public void setDate(final Date pDate) {
        this.date = pDate;
    }

    public SimpleDateFormat getSdf() {
        return sdf;
    }

    /**
     * Renvoie la date au format spécifié
     */
    @Override
    public String toString() {
        return sdf.format(date);
    }

}
